package com.gxt.riaapp.client.mvc;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.event.EventType;
import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.extjs.gxt.ui.client.mvc.View;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.gxt.riaapp.client.AppEvents;
import com.gxt.riaapp.client.mvc.model.Entry;
import com.gxt.riaapp.client.mvc.model.Page;

public class ContentView extends View {
	private TabPanel tabPanel;
	
	public ContentView(Controller controller) {
		super(controller);
	}
	
	@Override
	protected void initialize() {
		tabPanel = new TabPanel();
		tabPanel.setCloseContextMenu(true);
		tabPanel.setBorderStyle(false);
		tabPanel.setBodyBorder(false);
		tabPanel.setTabScroll(true);
		tabPanel.setAnimScroll(true);

		ContentPanel center = (ContentPanel) Registry.get(AppView.CENTER_PANEL);
	    center.add(tabPanel);
	    
	    center.layout();
	}
	public void setPageData(Entry entry){
		TabItem item = tabPanel.getSelectedItem();
		item.setData("entry", entry);
		System.out.println("원래 아이디:"+ item.getId());
//		item.removeAll();
		Page page = (Page)entry.get("page");
		page.setEntry(entry);
		System.out.println("entrh:::"+ entry.getId());
//		Page page = new Page(entry);
		entry.set("page", page);
//		item.add(page);
		
		item.setData("entry", entry);
		item.setId("page__" + page.getId()); // 나중에 찾을 수 있도록 아이디 세팅
		item.setText(entry.getName());
		item.setLayout(new FitLayout());
		item.add(page); // TabItem
		tabPanel.add(item);
	}
	public void onShowPage(Entry entry) {
		Page page = entry.get("page");
	    if (page == null) {	// entry에 page가 세팅되어 있지 않다면 이 Entry는 우측 프로그램 영역에 없는 Entry이다.
	    	System.out.println("pageis null...................");
	    	page = new Page(entry);	// Page객체를 생성하고
	    	entry.set("page", page); // entry에 page를 추가한다.
	    }
	    /**
	     * page id로 검색해서 없다면 추가하는 로직
	     */
	    System.out.println("page id :"+ page.getId());
		TabItem item = tabPanel.findItem("page__" + page.getId(), false);
		if (item == null) {
			item = new TabItem();
			item.setData("entry", entry);
			item.setClosable(entry.isClosable());
			item.setId("page__" + page.getId()); // 나중에 찾을 수 있도록 아이디 세팅
			item.setText(entry.getName());
			item.setLayout(new FitLayout());
			item.add(page); // TabItem
			tabPanel.add(item);
		}
		/**
		 * 위에서 생성된 item이 select된 상태로 전환
		 */
		if (item != tabPanel.getSelectedItem()) {
			tabPanel.setSelection(item);
		}
	}
	
	@Override
	protected void handleEvent(AppEvent event) {
		EventType type = event.getType();
		Entry entry = event.getData(); // 이벤트에 전달된 객체를 가져온다.
		if(type == AppEvents.ShowPage){	// Init일 경우에는 작동하지 않음.
			onShowPage(entry);
		}
		if(type == AppEvents.SetPageData){
			System.out.println("이벤트.");
			setPageData(entry);
		}
	}
}